package main

import (
	"bufio"
	"fmt"
	"io"
	"os"
)

func createAFile(path string) {
	//打开文件，新建文件
	f0, err0 := os.Create(path)
	if err0 != nil {
		fmt.Println("err0=", err0)
		return
	}
	//打开后关闭
	defer f0.Close()
	for i := 0; i < 10; i++ {
		s1 := fmt.Sprintln("hello:", i)
		n1, err1 := f0.WriteString(s1)
		if err1 != nil {
			fmt.Println("err1=", err1)
		}
		fmt.Println("n1=", n1)
	}
}

//按缓冲区读
func readAFile(path string) {
	f2, err2 := os.Open(path)
	if err2 != nil {
		fmt.Println("err2=", err2)
		return
	}
	defer f2.Close()
	bt := make([]byte, 1024)
	f2.Read(bt)
	fmt.Println("bt=", string(bt))
}

//按一行读
func readAFileLine(path string) {
	f2, err2 := os.Open(path)
	if err2 != nil {
		fmt.Println("err2=", err2)
		return
	}
	defer f2.Close()
	//新建一个缓冲区，把内容先读进缓冲区
	r := bufio.NewReader(f2)
	for {
		//遇到\n读取结束，但是也要读取\n
		buf, err3 := r.ReadBytes('\n')
		if err3 != nil {
			if io.EOF == err3 {
				break
			}
			fmt.Println("err3=", err3)
		}
		fmt.Printf(string(buf))
	}
}

//文件操作
func main() {
	//设备文件-标准输出 默认打开 可以直接使用
	os.Stdout.WriteString("hello world\n")
	var a string
	fmt.Println("a=?")
	fmt.Scan(&a)
	fmt.Println("a=", a)

	//写文件
	p0 := "./demo.txt"
	//createAFile(p0)
	//readAFile(p0)
	readAFileLine(p0)
}
